package scanner;

/**
 * Author: 4ut15m.4ny0neSec
 * Date: 2022/1
 * Desc: 这个抽象类声明了扫描模块们通用的一些属性及方法
 * 特定扫描模块需要的特定参数需要自行在实现类里声明
 * */
public abstract class Scanner {
    /**
     * targetUri:
     * 漏洞路径，比如confluence的漏洞路径为/pages/createpage-entervariables.action
     * 自然，也可以将该参数用作其他地方
     * URL:
     * 对于一些漏洞来说，也许我们直接设置URL进行操作会比较方便
     *
     * 自行决定怎么用就好
     * */
    public String targetUri;
    public String URL;


    /**
     * 参数解析:
     * 这里的解析是指将burpsuite其他组件传递进扫描器内的参数解析为扫描器自身需要的参数并直接进行设置，故无返回值
     * 比如在这个方法里设置: targetUri="/pages/createpage-entervariables.action";
     * */
    public abstract void parse();

    /**
     * 扫描模块的运行方法。
     * Params:
     *      String[] params: 根据扫描模块的具体需求不同，这里传入的参数也许会有不同，这里只是demo.
     * 后面会作如下考虑：
     * 1.在Scanner抽象类中添加run的重载方法
     * 2.具体Scanner自行实现自己需要用的run方法
     *
     * 上面两者，估摸着会二选其一。
     * */
    public abstract void run(String[] params);

    /**
     * 解析组件的版本
     * 一些应用的版本信息可能是比较容易获得的，比如web应用的版本信息记录在页面的powered by中
     * 像这样的应用程序，我们可以实现该方法对其版本信息进行解析。
     * 自然，如果没有需求则不必对其做具体安排。
     * Params:
     *      String res: 该参数为页面响应内容，即将页面响应流转换为字符串的内容
     * return:
     *      String: 返回值为一个字符串，其值为具体的版本信息，比如7.1.0或者7.14.1.2等等
     * */
    public abstract String regVersion(String res) ;

    public abstract boolean check(String url);
}
